﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

using FlashCards.Entities;

namespace FlashCards.Service
{    
    [ServiceContract]
    public interface IFlashCardsService
    {
        /// <summary>
        /// Bejelentkeztet egy felhasznalot a parameterkent kapott usernev es jelszo alapjan.
        /// </summary>
        /// <param name="loginName">a felhasznalo neve</param>
        /// <param name="passWord">a felhasznalo jelszava</param>
        /// <returns>a bejelentkezett felhasznalo</returns>
        [OperationContract]
        User Login(string loginName, string passWord);

        //[OperationContract]
        //void AddUser(User user);

        //[OperationContract]
        //List<User> ListAllUsers();

        /// <summary>
        /// Kilistazza a tarolt nyelveket.
        /// </summary>
        /// <returns>az alkalamazasban kezelt nyelvek listaja</returns>
        [OperationContract]
        List<Language> ListLanguages();

        /// <summary>
        /// Kilistazza a tarolt unitokat.
        /// </summary>
        /// <returns>az alkalmazasban kezel unit-ok listaja</returns>
        [OperationContract]
        List<Unit> ListUnits();

        /// <summary>
        /// Kilistazza a keresesi felteteleknek megfelelo szavakat.
        /// </summary>
        /// <param name="wordFilter"></param>
        /// <returns></returns>
        [OperationContract]
        List<Word> ListWords(string wordFilter, string categoryFilter, Language language);

        /// <summary>
        /// Visszaadja a parameterkent kapott azonositoju szot.
        /// </summary>
        /// <param name="id">a szo azonositoja</param>
        /// <returns>a megtalalt szo</returns>
        [OperationContract]
        Word GetWord(long id);

        /// <summary>
        /// Letarol egy szot, es visszadja a rendszer altal kiosztott azonositojat.
        /// </summary>
        /// <param name="word">a szo</param>
        /// <returns>a szo azonositoja</returns>
        [OperationContract]
        long StoreWord(Word word);
    }
}
